home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / biblio / bibtex / contrib / nature.bst < prev    next >
Text File  |  1992-07-19  |  20KB  |  1,013 lines

  1. % version = 1.05 of nature.bst 1992 June 29
  2.  
  3. % 1.01 1991 July 3  last name first
  4. %                   bold face volume numbers
  5. %                   volume followed by comma, not colon
  6. %                   parenthesis around year
  7. %                   no comma after page numbers (not done yet!)
  8. % 1.02 1991 Aug 7   Titles removed in FUNCTION {format.title}.
  9. %                   (Should put \nocite{TitlesOn}
  10. %                   mechanism in from jmb.bst next)
  11. % 1.03 1991 Aug 29  in inproceedings, book title preceeds the editors!!
  12. % 1.04 1991 Aug 30  year at end of inproceedings
  13. %                   no 'pages' in inproceedings
  14. %                   when no comma, don't put space instead
  15. % 1.04 1992 Jun 29  Fix format.vol.num.pages to use field.or.null to
  16. %                   correctly handle case of missing volume.
  17. %                   [Nelson H. F. Beebe <beebe@plot79.math.utah.edu>]
  18.  
  19. % from:
  20. % BibTeX standard bibliography style `unsrt'
  21.         % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
  22.         % Copyright (C) 1985, all rights reserved.
  23.         % Copying of this file is authorized only if either
  24.         % (1) you make absolutely no changes to your copy, including name, or
  25.         % (2) if you do make changes, you name it something other than
  26.         % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
  27.         % This restriction helps ensure that all standard styles are identical.
  28.         % The file btxbst.doc has the documentation for this style.
  29.  
  30. ENTRY
  31.   { address
  32.     author
  33.     booktitle
  34.     chapter
  35.     edition
  36.     editor
  37.     howpublished
  38.     institution
  39.     journal
  40.     key
  41.     month
  42.     note
  43.     number
  44.     organization
  45.     pages
  46.     publisher
  47.     school
  48.     series
  49.     title
  50.     type
  51.     volume
  52.     year
  53.   }
  54.   {}
  55.   { label }
  56.  
  57. INTEGERS { output.state before.all mid.sentence after.sentence after.block
  58.            docomma }
  59.  
  60. FUNCTION {init.state.consts}
  61. { #0 'before.all :=
  62.   #1 'mid.sentence :=
  63.   #2 'after.sentence :=
  64.   #3 'after.block :=
  65.  
  66.   #1 'docomma :=    % if it is 0 then don't do commas, otherwise do them.
  67. }
  68.  
  69. STRINGS { s t }
  70.  
  71. FUNCTION {output.nonnull}
  72. { 's :=
  73.   output.state mid.sentence =
  74.     { % doing a comma is controlled specifically using docomma
  75.       docomma #0 =
  76.       { "" * write$ } % TDS nothing if no comma
  77.       { ", " * write$ }
  78.       if$
  79.     }
  80.     { output.state after.block =
  81.         { add.period$ write$
  82.           newline$
  83.           "\newblock " write$
  84.         }
  85.         { output.state before.all =
  86.             'write$
  87.             { add.period$ " " * write$ }
  88.           if$
  89.         }
  90.       if$
  91.       mid.sentence 'output.state :=
  92.     }
  93.   if$
  94.   s
  95. }
  96.  
  97. FUNCTION {output}
  98. { duplicate$ empty$
  99.     'pop$
  100.     'output.nonnull
  101.   if$
  102. }
  103.  
  104. FUNCTION {output.check}
  105. { 't :=
  106.   duplicate$ empty$
  107.     { pop$ "empty " t * " in " * cite$ * warning$ }
  108.     'output.nonnull
  109.   if$
  110. }
  111.  
  112. FUNCTION {output.bibitem}
  113. { newline$
  114.   "\bibitem{" write$
  115.   cite$ write$
  116.   "}" write$
  117.   newline$
  118.   ""
  119.   before.all 'output.state :=
  120. }
  121.  
  122. FUNCTION {fin.entry}
  123. { add.period$
  124.   write$
  125.   newline$
  126. }
  127.  
  128. FUNCTION {new.block}
  129. { output.state before.all =
  130.     'skip$
  131.     { after.block 'output.state := }
  132.   if$
  133. }
  134.  
  135. FUNCTION {new.sentence}
  136. { output.state after.block =
  137.     'skip$
  138.     { output.state before.all =
  139.         'skip$
  140.         { after.sentence 'output.state := }
  141.       if$
  142.     }
  143.   if$
  144. }
  145.  
  146. FUNCTION {not}
  147. {   { #0 }
  148.     { #1 }
  149.   if$
  150. }
  151.  
  152. FUNCTION {and}
  153. {   'skip$
  154.     { pop$ #0 }
  155.   if$
  156. }
  157.  
  158. FUNCTION {or}
  159. {   { pop$ #1 }
  160.     'skip$
  161.   if$
  162. }
  163.  
  164. FUNCTION {new.block.checka}
  165. { empty$
  166.     'skip$
  167.     'new.block
  168.   if$
  169. }
  170.  
  171. FUNCTION {new.block.checkb}
  172. { empty$
  173.   swap$ empty$
  174.   and
  175.     'skip$
  176.     'new.block
  177.   if$
  178. }
  179.  
  180. FUNCTION {new.sentence.checka}
  181. { empty$
  182.     'skip$
  183.     'new.sentence
  184.   if$
  185. }
  186.  
  187. FUNCTION {new.sentence.checkb}
  188. { empty$
  189.   swap$ empty$
  190.   and
  191.     'skip$
  192.     'new.sentence
  193.   if$
  194. }
  195.  
  196. FUNCTION {field.or.null}
  197. { duplicate$ empty$
  198.     { pop$ "" }
  199.     'skip$
  200.   if$
  201. }
  202.  
  203. FUNCTION {emphasize}
  204. { duplicate$ empty$
  205.     { pop$ "" }
  206.     { "{\em " swap$ * "}" * }
  207.   if$
  208. }
  209.  
  210. INTEGERS { nameptr namesleft numnames }
  211.  
  212. FUNCTION {format.names}
  213. { 's :=
  214.   #1 'nameptr :=
  215.   s num.names$ 'numnames :=
  216.   numnames 'namesleft :=
  217.     { namesleft #0 > }
  218. %   { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=  % TDS
  219.     { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := % last name first
  220.       nameptr #1 >
  221.         { namesleft #1 >
  222.             { ", " * t * }
  223.             { numnames #2 >
  224.                 { "," * }
  225.                 'skip$
  226.               if$
  227.               t "others" =
  228.                 { " et~al." * }
  229.                 { " and " * t * }
  230.               if$
  231.             }
  232.           if$
  233.         }
  234.         't
  235.       if$
  236.       nameptr #1 + 'nameptr :=
  237.       namesleft #1 - 'namesleft :=
  238.     }
  239.   while$
  240. }
  241.  
  242. FUNCTION {format.authors}
  243. { author empty$
  244.     { "" }
  245.     { author format.names }
  246.   if$
  247. }
  248.  
  249. FUNCTION {format.editors}
  250. { editor empty$
  251.     { "" }
  252.     { editor format.names
  253.       editor num.names$ #1 >
  254.         { ", editors" * }
  255.         { ", editor" * }
  256.       if$
  257.     }
  258.   if$
  259. }
  260.  
  261. FUNCTION {format.title}
  262. { title empty$
  263.     { "" }
  264.     { "" } % the zapped title
  265. %    { title "t" change.case$ } % TDS NO TITLES
  266.   if$
  267. }
  268.  
  269. FUNCTION {n.dashify}
  270. { 't :=
  271.   ""
  272.     { t empty$ not }
  273.     { t #1 #1 substring$ "-" =
  274.         { t #1 #2 substring$ "--" = not
  275.             { "--" *
  276.               t #2 global.max$ substring$ 't :=
  277.             }
  278.             {   { t #1 #1 substring$ "-" = }
  279.                 { "-" *
  280.                   t #2 global.max$ substring$ 't :=
  281.                 }
  282.               while$
  283.             }
  284.           if$
  285.         }
  286.         { t #1 #1 substring$ *
  287.           t #2 global.max$ substring$ 't :=
  288.         }
  289.       if$
  290.     }
  291.   while$
  292. }
  293.  
  294. FUNCTION {format.date}
  295. { year empty$
  296.     { month empty$
  297.         { "" }
  298.         { "there's a month but no year in " cite$ * warning$
  299.           month
  300.         }
  301.       if$
  302.     }
  303.     { month empty$
  304. %        'year                       % TDS
  305. %        { month " " * year * }      % TDS
  306.          { " (" year * ")" * }
  307.          { " " month * " " * " (" year * ")" * * }
  308. %The preceding line was modified by Alan Rogers on 6/26/92.  It used to
  309. %look like this: { month " " * " (" year * ")" * * }
  310.       if$
  311.     }
  312.   if$
  313. }
  314.  
  315. FUNCTION {format.btitle}
  316. { title emphasize
  317. }
  318.  
  319. FUNCTION {tie.or.space.connect}
  320. { duplicate$ text.length$ #3 <
  321.     { "~" }
  322.     { " " }
  323.   if$
  324.   swap$ * *
  325. }
  326.  
  327. FUNCTION {either.or.check}
  328. { empty$
  329.     'pop$
  330.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  331.   if$
  332. }
  333.  
  334. FUNCTION {format.bvolume}
  335. { volume empty$
  336.     { "" }
  337.     { "volume" volume tie.or.space.connect
  338.       series empty$
  339.         'skip$
  340.         { " of " * series emphasize * }
  341.       if$
  342.       "volume and number" number either.or.check
  343.     }
  344.   if$
  345. }
  346.  
  347. FUNCTION {format.number.series}
  348. { volume empty$
  349.     { number empty$
  350.         { series field.or.null }
  351.         { output.state mid.sentence =
  352.             { "number" }
  353.             { "Number" }
  354.           if$
  355.           number tie.or.space.connect
  356.           series empty$
  357.             { "there's a number but no series in " cite$ * warning$ }
  358.             { " in " * series * }
  359.           if$
  360.         }
  361.       if$
  362.     }
  363.     { "" }
  364.   if$
  365. }
  366.  
  367. FUNCTION {format.edition}
  368. { edition empty$
  369.     { "" }
  370.     { output.state mid.sentence =
  371.         { edition "l" change.case$ " edition" * }
  372.         { edition "t" change.case$ " edition" * }
  373.       if$
  374.     }
  375.   if$
  376. }
  377.  
  378. INTEGERS { multiresult }
  379.  
  380. FUNCTION {multi.page.check}
  381. { 't :=
  382.   #0 'multiresult :=
  383.     { multiresult not
  384.       t empty$ not
  385.       and
  386.     }
  387.     { t #1 #1 substring$
  388.       duplicate$ "-" =
  389.       swap$ duplicate$ "," =
  390.       swap$ "+" =
  391.       or or
  392.         { #1 'multiresult := }
  393.         { t #2 global.max$ substring$ 't := }
  394.       if$
  395.     }
  396.   while$
  397.   multiresult
  398. }
  399.  
  400. FUNCTION {format.pages}
  401. { pages empty$
  402.     { "" }
  403.     { pages multi.page.check
  404. %        { "pages" pages n.dashify tie.or.space.connect }
  405. %        { "page" pages tie.or.space.connect }
  406. % no word in nature!
  407.         { "" pages n.dashify tie.or.space.connect }
  408.         { "" pages tie.or.space.connect }
  409.       if$
  410.     }
  411.   if$
  412. }
  413.  
  414. FUNCTION {format.vol.num.pages}
  415. { "{ \bf " volume field.or.null * "}" * % make volume bold face
  416.   number empty$
  417.     'skip$
  418.     { "(" number * ")" * *
  419.       volume empty$
  420.         { "there's a number but no volume in " cite$ * warning$ }
  421.         'skip$
  422.       if$
  423.     }
  424.   if$
  425.   pages empty$
  426.     'skip$
  427.     { duplicate$ empty$
  428.         { pop$ format.pages }
  429. %        { ":" * pages n.dashify * } % TDS
  430.         { ", " * pages n.dashify * } % comma, not colon TDS
  431.       if$
  432.     }
  433.   if$
  434. }
  435.  
  436. FUNCTION {format.chapter.pages}
  437. { chapter empty$
  438.     'format.pages
  439.     { type empty$
  440.         { "chapter" }
  441.         { type "l" change.case$ }
  442.       if$
  443.       chapter tie.or.space.connect
  444.       pages empty$
  445.         'skip$
  446.         { ", " * format.pages * }
  447.       if$
  448.     }
  449.   if$
  450. }
  451.  
  452. FUNCTION {format.in.ed.booktitle}
  453. { booktitle empty$
  454.     { "" }
  455.     { editor empty$
  456.         { "In " booktitle emphasize * }
  457. %       { "In " format.editors * ", " * booktitle emphasize * }
  458.         { % book title preceeds the editors!! TDS
  459.           "In "
  460.           booktitle
  461.           ", "
  462.           *
  463.           emphasize
  464.           *
  465.           format.editors
  466.           *
  467.           }
  468.       if$
  469.     }
  470.   if$
  471. }
  472.  
  473. FUNCTION {empty.misc.check}
  474. { author empty$ title empty$ howpublished empty$
  475.   month empty$ year empty$ note empty$
  476.   and and and and and
  477.     { "all relevant fields are empty in " cite$ * warning$ }
  478.     'skip$
  479.   if$
  480. }
  481.  
  482. FUNCTION {format.thesis.type}
  483. { type empty$
  484.     'skip$
  485.     { pop$
  486.       type "t" change.case$
  487.     }
  488.   if$
  489. }
  490.  
  491. FUNCTION {format.tr.number}
  492. { type empty$
  493.     { "Technical Report" }
  494.     'type
  495.   if$
  496.   number empty$
  497.     { "t" change.case$ }
  498.     { number tie.or.space.connect }
  499.   if$
  500. }
  501.  
  502. FUNCTION {format.article.crossref}
  503. { key empty$
  504.     { journal empty$
  505.         { "need key or journal for " cite$ * " to crossref " * crossref *
  506.           warning$
  507.           ""
  508.         }
  509.         { "In {\em " journal * "\/}" * }
  510.       if$
  511.     }
  512.     { "In " key * }
  513.   if$
  514.   " \cite{" * crossref * "}" *
  515. }
  516.  
  517. FUNCTION {format.crossref.editor}
  518. { editor #1 "{vv~}{ll}" format.name$
  519.   editor num.names$ duplicate$
  520.   #2 >
  521.     { pop$ " et~al." * }
  522.     { #2 <
  523.         'skip$
  524.         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  525.             { " et~al." * }
  526.             { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  527.           if$
  528.         }
  529.       if$
  530.     }
  531.   if$
  532. }
  533.  
  534. FUNCTION {format.book.crossref}
  535. { volume empty$
  536.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  537.       "In "
  538.     }
  539.     { "Volume" volume tie.or.space.connect
  540.       " of " *
  541.     }
  542.   if$
  543.   editor empty$
  544.   editor field.or.null author field.or.null =
  545.   or
  546.     { key empty$
  547.         { series empty$
  548.             { "need editor, key, or series for " cite$ * " to crossref " *
  549.               crossref * warning$
  550.               "" *
  551.             }
  552.             { "{\em " * series * "\/}" * }
  553.           if$
  554.         }
  555.         { key * }
  556.       if$
  557.     }
  558.     { format.crossref.editor * }
  559.   if$
  560.   " \cite{" * crossref * "}" *
  561. }
  562.  
  563. FUNCTION {format.incoll.inproc.crossref}
  564. { editor empty$
  565.   editor field.or.null author field.or.null =
  566.   or
  567.     { key empty$
  568.         { booktitle empty$
  569.             { "need editor, key, or booktitle for " cite$ * " to crossref " *
  570.               crossref * warning$
  571.               ""
  572.             }
  573.             { "In {\em " booktitle * "\/}" * }
  574.           if$
  575.         }
  576.         { "In " key * }
  577.       if$
  578.     }
  579.     { "In " format.crossref.editor * }
  580.   if$
  581.   " \cite{" * crossref * "}" *
  582. }
  583.  
  584. FUNCTION {article}
  585. { output.bibitem
  586.   format.authors "author" output.check
  587.   new.block
  588.   format.title "title" output.check
  589.   new.block
  590.   crossref missing$
  591.     {
  592.       journal emphasize "journal" output.check
  593.       #0 'docomma :=    % TURN COMMAS OFF
  594.       format.vol.num.pages output  % these now do their own comma!!
  595.       format.date "year" output.check
  596.       #1 'docomma :=    % TURN COMMAS ON
  597.     }
  598.     { format.article.crossref output.nonnull
  599.       format.pages output
  600.     }
  601.   if$
  602.   new.block
  603.   note output
  604.   fin.entry
  605. }
  606.  
  607. FUNCTION {book}
  608. { output.bibitem
  609.   author empty$
  610.     { format.editors "author and editor" output.check }
  611.     { format.authors output.nonnull
  612.       crossref missing$
  613.         { "author and editor" editor either.or.check }
  614.         'skip$
  615.       if$
  616.     }
  617.   if$
  618.   new.block
  619.   format.btitle "title" output.check
  620.   crossref missing$
  621.     { format.bvolume output
  622.       new.block
  623.       format.number.series output
  624.       new.sentence
  625.       publisher "publisher" output.check
  626.       address output
  627.     }
  628.     { new.block
  629.       format.book.crossref output.nonnull
  630.     }
  631.   if$
  632.   format.edition output
  633.   format.date "year" output.check
  634.   new.block
  635.   note output
  636.   fin.entry
  637. }
  638.  
  639. FUNCTION {booklet}
  640. { output.bibitem
  641.   format.authors output
  642.   new.block
  643.   format.title "title" output.check
  644.   howpublished address new.block.checkb
  645.   howpublished output
  646.   address output
  647.   format.date output
  648.   new.block
  649.   note output
  650.   fin.entry
  651. }
  652.  
  653. FUNCTION {inbook}
  654. { output.bibitem
  655.   author empty$
  656.     { format.editors "author and editor" output.check }
  657.     { format.authors output.nonnull
  658.       crossref missing$
  659.         { "author and editor" editor either.or.check }
  660.         'skip$
  661.       if$
  662.     }
  663.   if$
  664.   new.block
  665.   format.btitle "title" output.check
  666.   crossref missing$
  667.     { format.bvolume output
  668.       format.chapter.pages "chapter and pages" output.check
  669.       new.block
  670.       format.number.series output
  671.       new.sentence
  672.       publisher "publisher" output.check
  673.       address output
  674.     }
  675.     { format.chapter.pages "chapter and pages" output.check
  676.       new.block
  677.       format.book.crossref output.nonnull
  678.     }
  679.   if$
  680.   format.edition output
  681.       #0 'docomma :=    % TURN COMMAS OFF
  682.   format.date "year" output.check
  683.       #1 'docomma :=    % TURN COMMAS ON
  684.   new.block
  685.   note output
  686.   fin.entry
  687. }
  688.  
  689. FUNCTION {incollection}
  690. { output.bibitem
  691.   format.authors "author" output.check
  692.   new.block
  693.   format.title "title" output.check
  694.   new.block
  695.   crossref missing$
  696.     { format.in.ed.booktitle "booktitle" output.check
  697.       format.bvolume output
  698.       format.number.series output
  699.       format.chapter.pages output
  700.       new.sentence
  701.       publisher "publisher" output.check
  702.       address output
  703.       #0 'docomma :=    % TURN COMMAS OFF
  704.       format.edition output
  705.       format.date "year" output.check
  706.       #1 'docomma :=    % TURN COMMAS ON
  707.     }
  708.     { format.incoll.inproc.crossref output.nonnull
  709.       format.chapter.pages output
  710.     }
  711.   if$
  712.   new.block
  713.   note output
  714.   fin.entry
  715. }
  716.  
  717. FUNCTION {inproceedings}
  718. { output.bibitem
  719.   format.authors "author" output.check
  720.   new.block
  721.   format.title "title" output.check
  722.   new.block
  723.   crossref missing$
  724.     { format.in.ed.booktitle "booktitle" output.check
  725.       format.bvolume output
  726.       format.number.series output
  727.       format.pages output
  728.       address empty$
  729.         { organization publisher new.sentence.checkb
  730.           organization output
  731.           publisher output
  732.           format.date "year" output.check
  733.         }
  734.         {
  735. %          new.sentence
  736.       #0 'docomma :=    % TURN COMMAS OFF
  737.           " (" output.nonnull
  738.           organization output
  739.           publisher output
  740.       #1 'docomma :=    % TURN COMMAS ON
  741.       address output.nonnull
  742. % year is at the end TDS
  743. %          format.date "year" output.check
  744. %zzz
  745.           year ")" * output
  746.         }
  747.       if$
  748.     }
  749.     { format.incoll.inproc.crossref output.nonnull
  750.       format.pages output
  751.     }
  752.   if$
  753.   new.block
  754.   note output
  755.   fin.entry
  756. }
  757.  
  758. FUNCTION {conference} { inproceedings }
  759.  
  760. FUNCTION {manual}
  761. { output.bibitem
  762.   author empty$
  763.     { organization empty$
  764.         'skip$
  765.         { organization output.nonnull
  766.           address output
  767.         }
  768.       if$
  769.     }
  770.     { format.authors output.nonnull }
  771.   if$
  772.   new.block
  773.   format.btitle "title" output.check
  774.   author empty$
  775.     { organization empty$
  776.         { address new.block.checka
  777.           address output
  778.         }
  779.         'skip$
  780.       if$
  781.     }
  782.     { organization address new.block.checkb
  783.       organization output
  784.       address output
  785.     }
  786.   if$
  787.   format.edition output
  788.   format.date output
  789.   new.block
  790.   note output
  791.   fin.entry
  792. }
  793.  
  794. FUNCTION {mastersthesis}
  795. { output.bibitem
  796.   format.authors "author" output.check
  797.   new.block
  798.   format.title "title" output.check
  799.   new.block
  800.   "Master's thesis" format.thesis.type output.nonnull
  801.   school "school" output.check
  802.   address output
  803.   format.date "year" output.check
  804.   new.block
  805.   note output
  806.   fin.entry
  807. }
  808.  
  809. FUNCTION {misc}
  810. { output.bibitem
  811.   format.authors output
  812.   title howpublished new.block.checkb
  813.   format.title output
  814.   howpublished new.block.checka
  815.   howpublished output
  816.   format.date output
  817.   new.block
  818.   note output
  819.   fin.entry
  820.   empty.misc.check
  821. }
  822.  
  823. FUNCTION {phdthesis}
  824. { output.bibitem
  825.   format.authors "author" output.check
  826.   new.block
  827.   format.btitle "title" output.check
  828.   new.block
  829.   "PhD thesis" format.thesis.type output.nonnull
  830.   school "school" output.check
  831.   address output
  832.   format.date "year" output.check
  833.   new.block
  834.   note output
  835.   fin.entry
  836. }
  837.  
  838. FUNCTION {proceedings}
  839. { output.bibitem
  840.   editor empty$
  841.     { organization output }
  842.     { format.editors output.nonnull }
  843.   if$
  844.   new.block
  845.   format.btitle "title" output.check
  846.   format.bvolume output
  847.   format.number.series output
  848.   address empty$
  849.     { editor empty$
  850.         { publisher new.sentence.checka }
  851.         { organization publisher new.sentence.checkb
  852.           organization output
  853.         }
  854.       if$
  855.       publisher output
  856.       format.date "year" output.check
  857.     }
  858.     { address output.nonnull
  859.       format.date "year" output.check
  860.       new.sentence
  861.       editor empty$
  862.         'skip$
  863.         { organization output }
  864.       if$
  865.       publisher output
  866.     }
  867.   if$
  868.   new.block
  869.   note output
  870.   fin.entry
  871. }
  872.  
  873. FUNCTION {techreport}
  874. { output.bibitem
  875.   format.authors "author" output.check
  876.   new.block
  877.   format.title "title" output.check
  878.   new.block
  879.   format.tr.number output.nonnull
  880.   institution "institution" output.check
  881.   address output
  882.   format.date "year" output.check
  883.   new.block
  884.   note output
  885.   fin.entry
  886. }
  887.  
  888. FUNCTION {unpublished}
  889. { output.bibitem
  890.   format.authors "author" output.check
  891.   new.block
  892.   format.title "title" output.check
  893.   new.block
  894.   note "note" output.check
  895.   format.date output
  896.   fin.entry
  897. }
  898.  
  899. FUNCTION {default.type} { misc }
  900.  
  901. MACRO {jan} {"January"}
  902.  
  903. MACRO {feb} {"February"}
  904.  
  905. MACRO {mar} {"March"}
  906.  
  907. MACRO {apr} {"April"}
  908.  
  909. MACRO {may} {"May"}
  910.  
  911. MACRO {jun} {"June"}
  912.  
  913. MACRO {jul} {"July"}
  914.  
  915. MACRO {aug} {"August"}
  916.  
  917. MACRO {sep} {"September"}
  918.  
  919. MACRO {oct} {"October"}
  920.  
  921. MACRO {nov} {"November"}
  922.  
  923. MACRO {dec} {"December"}
  924.  
  925. MACRO {acmcs} {"ACM Computing Surveys"}
  926.  
  927. MACRO {acta} {"Acta Informatica"}
  928.  
  929. MACRO {cacm} {"Communications of the ACM"}
  930.  
  931. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  932.  
  933. MACRO {ibmsj} {"IBM Systems Journal"}
  934.  
  935. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  936.  
  937. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  938.  
  939. MACRO {ieeetcad}
  940.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  941.  
  942. MACRO {ipl} {"Information Processing Letters"}
  943.  
  944. MACRO {jacm} {"Journal of the ACM"}
  945.  
  946. MACRO {jcss} {"Journal of Computer and System Sciences"}
  947.  
  948. MACRO {scp} {"Science of Computer Programming"}
  949.  
  950. MACRO {sicomp} {"SIAM Journal on Computing"}
  951.  
  952. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  953.  
  954. MACRO {tods} {"ACM Transactions on Database Systems"}
  955.  
  956. MACRO {tog} {"ACM Transactions on Graphics"}
  957.  
  958. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  959.  
  960. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  961.  
  962. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  963.  
  964. MACRO {tcs} {"Theoretical Computer Science"}
  965.  
  966. READ
  967.  
  968. STRINGS { longest.label }
  969.  
  970. INTEGERS { number.label longest.label.width }
  971.  
  972. FUNCTION {initialize.longest.label}
  973. { "" 'longest.label :=
  974.   #1 'number.label :=
  975.   #0 'longest.label.width :=
  976. }
  977.  
  978. FUNCTION {longest.label.pass}
  979. { number.label int.to.str$ 'label :=
  980.   number.label #1 + 'number.label :=
  981.   label width$ longest.label.width >
  982.     { label 'longest.label :=
  983.       label width$ 'longest.label.width :=
  984.     }
  985.     'skip$
  986.   if$
  987. }
  988.  
  989. EXECUTE {initialize.longest.label}
  990.  
  991. ITERATE {longest.label.pass}
  992.  
  993. FUNCTION {begin.bib}
  994. { preamble$ empty$
  995.     'skip$
  996.     { preamble$ write$ newline$ }
  997.   if$
  998.   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  999. }
  1000.  
  1001. EXECUTE {begin.bib}
  1002.  
  1003. EXECUTE {init.state.consts}
  1004.  
  1005. ITERATE {call.type$}
  1006.  
  1007. FUNCTION {end.bib}
  1008. { newline$
  1009.   "\end{thebibliography}" write$ newline$
  1010. }
  1011.  
  1012. EXECUTE {end.bib}
  1013.